home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-23 | 3.5 KB | 132 lines | [TEXT/PJMM] |
- unit SmallEvents;
- { DeHQX v2.0.0 © Peter Lewis, Aug 1991 }
-
- interface
-
- uses
- MyTypes, AppGlobals, MyMainLoop, MyUtilities, MyMenus, Preferences, MyNotifier, DoMenus;
-
- function HandleSimpleEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply): boolean;
- { Get an event, handle it, and return true if more needs be done }
- procedure HandleMainEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply);
- { Get an event, handle it, then handle menus and keys }
- function HandleCancelEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply): boolean;
- { Get an event, handle it, then handle menus and keys and return true if cancel (cmd-., or quit) }
- procedure HandleCancelErrorEvents (sleep: longInt; rgn: rgnHandle; var oe: OSErr; var reply: HEReply);
- { Get an event, handle it, then handle menus and keys and set oe=cancelErr if oe=noErr }
-
- implementation
-
- function HandleSimpleEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply): boolean;
- procedure HandleHilitePrefItem (item: integer);
- var
- kind: integer;
- h: handle;
- r: rect;
- f: longInt;
- begin
- GetDItem(prefs_dialog, item, kind, h, r);
- HiliteControl(controlHandle(h), 1);
- Delay(2, f);
- HiliteControl(controlHandle(h), 0);
- HandlePrefitem(item);
- end;
- var
- er: eventRecord;
- b: boolean;
- begin
- SetMenus;
- if in_foreground then
- NotifyCompletion;
- WaitForEvent(er, sleep, rgn);
- b := HandleEvents(er, reply);
- if b then
- if (FrontWindow = prefs_dialog) and (prefs_dialog <> nil) then
- with reply do
- case todo of
- T_Close:
- begin
- ClosePreferences;
- b := false;
- end;
- T_Dialog:
- begin
- HandlePrefItem(theitem);
- b := false;
- end;
- T_Key:
- begin
- if (BAND(HEer.message, charCodeMask) = 13) or (BAND(HEer.message, charCodeMask) = 3) then
- HandleHilitePrefItem(Pref_Default_Item)
- else if (BAND(HEer.message, charCodeMask) = ord('.')) and (BAND(HEer.modifiers, cmdKey) <> 0) then
- HandleHilitePrefItem(Pref_Cancel_Item)
- else
- SysBeep(1);
- b := false;
- end;
- otherwise
- ;
- end;
- HandleSimpleEvents := b;
- end;
-
- procedure HandleMainEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply);
- begin
- if HandleSimpleEvents(sleep, rgn, reply) then
- with reply do
- case todo of
- T_Menu:
- begin
- DoMenu(themenu, theitem);
- end;
- T_Key:
- SysBeep(1);
- otherwise
- ;
- end;
- end;
-
- function HandleCancelEvents (sleep: longInt; rgn: rgnHandle; var reply: HEReply): boolean;
- var
- b: boolean;
- a: integer;
- begin
- b := false;
- if HandleSimpleEvents(sleep, rgn, reply) then
- with reply do
- case todo of
- T_Menu:
- begin
- b := quitNow;
- DoMenu(themenu, theitem);
- if quitNow and not b then begin
- a := Alert(quit_now_alert_id, nil);
- if a <> 1 then begin
- quitNow := false;
- HiliteMenu(0);
- end;
- end;
- if quitNow then
- b := true;
- end;
- T_Key:
- if (BAND(HEer.message, charCodeMask) = ord('.')) and (BAND(HEer.modifiers, cmdKey) <> 0) then
- b := true
- else
- SysBeep(1);
- T_Dialog:
- b := true; { Only dialog event we can get is the Cancel button (I think!), others are handled before here }
- otherwise
- ;
- end;
- HandleCancelEvents := b;
- end;
-
- procedure HandleCancelErrorEvents (sleep: longInt; rgn: rgnHandle; var oe: OSErr; var reply: HEReply);
- begin
- if HandleCancelEvents(sleep, rgn, reply) then
- if oe = noErr then
- oe := cancelErr;
- end;
-
- end.